package com.stt.design.manager;

import com.stt.design.iterator.PriorityTaskIterator;
import com.stt.design.model.DesignTask;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

/**
 * 任务管理器
 */
public class TaskManager {

    private static TaskManager instance; // 单例模式
    private List<DesignTask> tasks = Collections.synchronizedList(new ArrayList<>()); // 线程安全的List

    private TaskManager() {}

    // 单例模式
    //synchronized 同步锁
    public static synchronized TaskManager getInstance() {
        if (instance == null) {
            instance = new TaskManager();
        }
        return instance;
    }
    // 添加任务
    /*或者使用同步方法  public synchronized void addTask(DesignTask task)
    // Collections.synchronizedLis 包装了List，使其线程安全
    // 线程安全的List，在多线程环境下，可以保证线程安全，不会出现数据不同步的问题
    // 但是，在单线程环境下，效率会低于非线程安全的List
    // 所以，在单线程环境下，建议使用非线程安全的List
    // 而在多线程环境下，建议使用线程安全的List */
    public void addTask(DesignTask task) {
        tasks.add(task);
    }

    // 获取任务数
    public int getSize() {
        return tasks.size();
    }

    // 迭代器模式：按优先级过滤
    public Iterator<DesignTask> priorityIterator(int minPriority) {
        return new PriorityTaskIterator(tasks, minPriority);
    }
    // 移除任务
    public void removeTask(int index) {
        tasks.remove(index);
    }
}
